home *** CD-ROM | disk | FTP | other *** search
/ Apple WWDC 1996 / WWDC96_1996 (CD).toast / Technology Materials / MacOS 8 Resources / Developer Tools / Mac OS 8 Interfaces & Libraries / Interfaces / AIncludes / DriverGestalt.a < prev    next >
Text File  |  1996-05-01  |  14KB  |  304 lines

  1. ;
  2. ;    File:        DriverGestalt.a
  3. ;
  4. ;    Contains:    Driver Gestalt interfaces
  5. ;
  6. ;    Version:    Technology:    System 7.5
  7. ;                Release:    Universal Interfaces 3.0d3 on Copland DR1
  8. ;
  9. ;    Copyright:    © 1984-1996 by Apple Computer, Inc.  All rights reserved.
  10. ;
  11. ;    Bugs?:        If you find a problem with this file, send the file and version
  12. ;                information (from above) and the problem description to:
  13. ;
  14. ;                    Internet:    apple.bugs@applelink.apple.com
  15. ;                    AppleLink:    APPLE.BUGS
  16. ;
  17. ;
  18.     IF &TYPE('__DRIVERGESTALT__') = 'UNDEFINED' THEN
  19. __DRIVERGESTALT__ SET 1
  20.  
  21.     IF &TYPE('__TYPES__') = 'UNDEFINED' THEN
  22.     include 'Types.a'
  23.     ENDIF
  24.     IF &TYPE('__OSUTILS__') = 'UNDEFINED' THEN
  25.     include 'OSUtils.a'
  26.     ENDIF
  27.     IF &TYPE('__SCSI__') = 'UNDEFINED' THEN
  28.     include 'SCSI.a'
  29.     ENDIF
  30.     IF FOR_SYSTEM7_ONLY THEN
  31. ; __________________________________________________________________________________
  32. ;  The Driver Gestalt bit in the dCtlFlags 
  33.  
  34. kbDriverGestaltEnable            EQU        2
  35. kmDriverGestaltEnableMask        EQU        $04
  36. ; __________________________________________________________________________________
  37. ;  Driver Gestalt related csCodes 
  38.  
  39. kDriverGestaltCode                EQU        43                    ; various uses 
  40. kDriverConfigureCode            EQU        43                    ; various uses 
  41. kdgLowPowerMode                    EQU        70                    ; Sets/Returns the current energy consumption level 
  42. kdgReturnDeviceID                EQU        120                    ; returns SCSI DevID in csParam[0] 
  43. kdgGetCDDeviceInfo                EQU        121                    ; returns CDDeviceCharacteristics in csParam[0] 
  44. ; __________________________________________________________________________________
  45. ;  Driver Gestalt selectors 
  46.  
  47. kdgVersion                        EQU        'vers'                ; Version number of the driver in standard Apple format 
  48. kdgDeviceType                    EQU        'devt'                ; The type of device the driver is driving. 
  49. kdgInterface                    EQU        'intf'                ; The underlying interface that the driver is using (if any) 
  50. kdgSync                            EQU        'sync'                ; True if driver only behaves synchronously. 
  51. kdgBoot                            EQU        'boot'                ; value to place in PRAM for this drive (long) 
  52. kdgWide                            EQU        'wide'                ; True if driver supports ioWPosOffset 
  53. kdgPurge                        EQU        'purg'                ; Driver purge permission (True = purge; False = no purge) 
  54. kdgSupportsSwitching            EQU        'lpwr'                ; True if driver supports power switching 
  55. kdgMin3VPower                    EQU        'pmn3'                ; Minimum 3.3V power consumption in microWatts 
  56. kdgMin5VPower                    EQU        'pmn5'                ; Minimum 5V power consumption in microWatts 
  57. kdgMax3VPower                    EQU        'pmx3'                ; Maximum 3.3V power consumption in microWatts 
  58. kdgMax5VPower                    EQU        'pmx5'                ; Maximum 5V power consumption in microWatts 
  59. kdgInHighPower                    EQU        'psta'                ; True if device is currently in high power mode 
  60. kdgSupportsPowerCtl                EQU        'psup'                ; True if driver supports following five calls 
  61. kdgAPI                            EQU        'dAPI'                ; API support for PC Exchange 
  62. kdgEject                        EQU        'ejec'                ; Eject options for shutdown/restart <2/03/95> 
  63. ; __________________________________________________________________________________
  64. ;  status parameter block for Driver Gestalt calls 
  65. DriverGestaltParam        RECORD 0
  66. qLink                     ds.l    1                ; offset: $0 (0)
  67. qType                     ds.w    1                ; offset: $4 (4)
  68. ioTrap                     ds.w    1                ; offset: $6 (6)
  69. ioCmdAddr                 ds.l    1                ; offset: $8 (8)
  70. ioCompletion             ds.l    1                ; offset: $C (12)
  71. ioResult                 ds.w    1                ; offset: $10 (16)
  72. ioNamePtr                 ds.l    1                ; offset: $12 (18)
  73. ioVRefNum                 ds.w    1                ; offset: $16 (22)
  74. ioCRefNum                 ds.w    1                ; offset: $18 (24)        ;  refNum for I/O operation 
  75. csCode                     ds.w    1                ; offset: $1A (26)        ;     == kDriverGestaltCode 
  76. driverGestaltSelector     ds.l    1                ; offset: $1C (28)        ;  'sync', 'vers', etc. 
  77. driverGestaltResponse     ds.l    1                ; offset: $20 (32)        ;  Could be a pointer, bit field or other format 
  78. driverGestaltResponse1     ds.l    1                ; offset: $24 (36)        ;  Could be a pointer, bit field or other format 
  79. driverGestaltResponse2     ds.l    1                ; offset: $28 (40)        ;  Could be a pointer, bit field or other format 
  80. driverGestaltResponse3     ds.l    1                ; offset: $2C (44)        ;  Could be a pointer, bit field or other format 
  81. driverGestaltfiller         ds.w    1                ; offset: $30 (48)        ;  To pad out to the size of a controlPB 
  82. sizeof                     EQU *                    ; size:   $32 (50)
  83.                         ENDR
  84. ;
  85. ; Note that the various response definitions are overlays of the response fields above.
  86. ;   For instance the deviceType response would be returned in driverGestaltResponse.
  87. ;   The DriverGestaltPurgeResponse would be in driverGestaltResponse and driverGestaltResponse1
  88. ;
  89. ; __________________________________________________________________________________
  90. ;  Device Types response 
  91. DriverGestaltDevTResponse RECORD 0
  92. deviceType                 ds.l    1                ; offset: $0 (0)
  93. sizeof                     EQU *                    ; size:   $4 (4)
  94.                         ENDR
  95.  
  96. kdgDiskType                        EQU        'disk'                ; standard r/w disk drive 
  97. kdgTapeType                        EQU        'tape'                ; tape drive 
  98. kdgPrinterType                    EQU        'prnt'                ; printer 
  99. kdgProcessorType                EQU        'proc'                ; processor 
  100. kdgWormType                        EQU        'worm'                ; write-once 
  101. kdgCDType                        EQU        'cdrm'                ; cd-rom drive 
  102. kdgFloppyType                    EQU        'flop'                ; floppy disk drive 
  103. kdgScannerType                    EQU        'scan'                ; scanner 
  104. kdgFileType                        EQU        'file'                ; Logical Partition type based on a file (Drive Container) 
  105. kdgRemovableType                EQU        'rdsk'                ; A removable media hard disk drive ie. Syquest, Bernioulli 
  106. ; __________________________________________________________________________________
  107. ;  Device Interfaces response 
  108. DriverGestaltIntfResponse RECORD 0
  109. interfaceType             ds.l    1                ; offset: $0 (0)
  110. sizeof                     EQU *                    ; size:   $4 (4)
  111.                         ENDR
  112.  
  113. kdgScsiIntf                        EQU        'scsi'
  114. kdgPcmciaIntf                    EQU        'pcmc'
  115. kdgATAIntf                        EQU        'ata '
  116. kdgFireWireIntf                    EQU        'fire'
  117. kdgExtBus                        EQU        'card'
  118. ; __________________________________________________________________________________
  119. ;  Power Saving 
  120. DriverGestaltPowerResponse RECORD 0
  121. powerValue                 ds.l    1                ; offset: $0 (0)        ;  Power consumed in µWatts 
  122. sizeof                     EQU *                    ; size:   $4 (4)
  123.                         ENDR
  124. ; __________________________________________________________________________________
  125. ;  Disk Specific 
  126. DriverGestaltSyncResponse RECORD 0
  127. behavesSynchronously     ds.b    1                ; offset: $0 (0)
  128. pad                         ds.b    3                ; offset: $1 (1)
  129. sizeof                     EQU *                    ; size:   $4 (4)
  130.                         ENDR
  131. DriverGestaltBootResponse RECORD 0
  132. extDev                     ds.b    1                ; offset: $0 (0)        ;   Packed target (upper 5 bits) LUN (lower 3 bits) 
  133. partition                 ds.b    1                ; offset: $1 (1)        ;   Unused 
  134. SIMSlot                     ds.b    1                ; offset: $2 (2)        ;   Slot 
  135. SIMsRSRC                 ds.b    1                ; offset: $3 (3)        ;   sRsrcID 
  136. sizeof                     EQU *                    ; size:   $4 (4)
  137.                         ENDR
  138. DriverGestaltAPIResponse RECORD 0
  139. partitionCmds             ds.w    1                ; offset: $0 (0)        ;  if bit 0 is nonzero, supports partition control and status calls 
  140. ;          prohibitMounting (control, kProhibitMounting) 
  141. ;          partitionToVRef (status, kGetPartitionStatus) 
  142. ;          getPartitionInfo (status, kGetPartInfo) 
  143. unused1                     ds.w    1                ; offset: $2 (2)        ;  all the unused fields should be zero 
  144. unused2                     ds.w    1                ; offset: $4 (4)
  145. unused3                     ds.w    1                ; offset: $6 (6)
  146. unused4                     ds.w    1                ; offset: $8 (8)
  147. unused5                     ds.w    1                ; offset: $A (10)
  148. unused6                     ds.w    1                ; offset: $C (12)
  149. unused7                     ds.w    1                ; offset: $E (14)
  150. unused8                     ds.w    1                ; offset: $10 (16)
  151. unused9                     ds.w    1                ; offset: $12 (18)
  152. unused10                 ds.w    1                ; offset: $14 (20)
  153. sizeof                     EQU *                    ; size:   $16 (22)
  154.                         ENDR
  155. ;  Flags for purge permissions 
  156.  
  157. kbCloseOk                        EQU        0                    ; Ok to call Close 
  158. kbRemoveOk                        EQU        1                    ; Ok to call RemoveDrvr 
  159. kbPurgeOk                        EQU        2                    ; Ok to call DisposePtr 
  160. kmNoCloseNoPurge                EQU        0
  161. kmOkCloseNoPurge                EQU        $03
  162. kmOkCloseOkPurge                EQU        $07
  163. ;  Driver purge permission structure 
  164. DriverGestaltPurgeResponse RECORD 0
  165. purgePermission             ds.w    1                ; offset: $0 (0)        ;  0 = Do not change the state of the driver 
  166. ;  3 = Do Close() and DrvrRemove() this driver 
  167. ;  but don't deallocate driver code 
  168. ;  7 = Do Close(), DrvrRemove(), and DisposePtr() 
  169. purgeReserved             ds.w    1                ; offset: $2 (2)
  170. purgeDriverPointer         ds.l    1                ; offset: $4 (4)        ;  pointer to the start of the driver block (valid 
  171. ;  only of DisposePtr permission is given 
  172. sizeof                     EQU *                    ; size:   $8 (8)
  173.                         ENDR
  174. DriverGestaltEjectResponse RECORD 0
  175. ejectFeatures             ds.l    1                ; offset: $0 (0)        ;   
  176. sizeof                     EQU *                    ; size:   $4 (4)
  177.                         ENDR
  178. ;  Flags for Ejection Features field 
  179.  
  180. kRestartDontEject                EQU        0                    ; Dont Want eject during Restart 
  181. kShutDownDontEject                EQU        1                    ; Dont Want eject during Shutdown 
  182. kRestartDontEject_Mask            EQU        $01
  183. kShutDownDontEject_Mask            EQU        $02
  184. ; __________________________________________________________________________________
  185. ;  CD-ROM Specific 
  186. ;
  187. ; The CDDeviceCharacteristics result is returned in csParam[0] and csParam[1] of a 
  188. ;   standard CntrlParam parameter block called with csCode kdgGetCDDeviceInfo.
  189. ;
  190. CDDeviceCharacteristics    RECORD 0
  191. speedMajor                 ds.b    1                ; offset: $0 (0)        ;  High byte of fixed point number containing drive speed 
  192. speedMinor                 ds.b    1                ; offset: $1 (1)        ;  Low byte of "" CD 300 == 2.2, CD_SC == 1.0 etc. 
  193. cdFeatures                 ds.w    1                ; offset: $2 (2)        ;  Flags field for features and transport type of this CD-ROM 
  194. sizeof                     EQU *                    ; size:   $4 (4)
  195.                         ENDR
  196.  
  197. cdFeatureFlagsMask                EQU        $FFFC                ; The Flags are in the first 14 bits of the cdFeatures field 
  198. cdTransportMask                    EQU        $0003                ; The transport type is in the last 2 bits of the cdFeatures field 
  199. ;  Flags for CD Features field 
  200.  
  201. cdMute                            EQU        0                    ; The following flags have the same bit number 
  202. cdLeftToChannel                    EQU        1                    ; as the Audio Mode they represent.  Don't change 
  203. cdRightToChannel                EQU        2                    ; them without changing dControl.c 
  204. cdLeftPlusRight                    EQU        3                    ; Reserve some space for new audio mixing features (4-7) 
  205. cdSCSI_2                        EQU        8                    ; Supports SCSI2 CD Command Set 
  206. cdStereoVolume                    EQU        9                    ; Can support two different volumes (1 on each channel) 
  207. cdDisconnect                    EQU        10                    ; Drive supports disconnect/reconnect 
  208. cdWriteOnce                        EQU        11                    ; Drive is a write/once (CD-R?) type drive 
  209. cdMute_Mask                        EQU        $01
  210. cdLeftToChannel_Mask            EQU        $02
  211. cdRightToChannel_Mask            EQU        $04
  212. cdLeftPlusRight_Mask            EQU        $08
  213. cdSCSI_2_Mask                    EQU        $0100
  214. cdStereoVolume_Mask                EQU        $0200
  215. cdDisconnect_Mask                EQU        $0400
  216. cdWriteOnce_Mask                EQU        $0800
  217. ;  Transport types 
  218.  
  219. cdCaddy                            EQU        0                    ; CD_SC,CD_SC_PLUS,CD-300 etc. 
  220. cdTray                            EQU        1                    ; CD_300_PLUS etc. 
  221. cdLid                            EQU        2                    ; Power CD - eg no eject mechanism 
  222. ;
  223. ; the following are used by PC Exchange (and houdini)
  224. ; Control Codes
  225. ;
  226.  
  227. kRegisterPartition                EQU        50                    ; PCX needs a new Drive (for a non-macintosh partition found on the disk)
  228. OLD_REGISTER_PARTITION            EQU        301                    ; left in for compatibility with shipping Houdini
  229. THE_DRIVE                        EQU        0                    ; DrvQElPtr for the partition to register
  230. THE_PHYS_START                    EQU        1                    ; The start of the partition in logical blocks
  231. THE_PHYS_SIZE                    EQU        2                    ; The size of the partition in logical blocks
  232. kGetADrive                        EQU        51                    ; control call to ask the driver to create a drive
  233. OLD_GET_A_DRIVE                    EQU        302                    ; left in for compatibility with shipping Houdini
  234. THE_VAR_QUEL                    EQU        0                    ; a VAR parameter for the returned DrvQElPtr
  235. kProhibitMounting                EQU        52                    ; Dont allow mounting of the following drives
  236. kOldProhibitMounting            EQU        2100                ; left in for compatibility with shipping Houdini
  237. kProhibitDevice                    EQU        0                    ; CS Param 0 and 1 (partInfoRecPtr)
  238. kIsContainerMounted                EQU        53
  239. kOldIsContainerMounted            EQU        2201                ; left in for compatibility with shipping Houdini            
  240. kContainerVRef                    EQU        0                    ; CS Param 0 and 1 (VRefNum)
  241. kContainerParID                    EQU        1                    ; CS Param 2 and 3 (Parent ID)
  242. kContainerName                    EQU        2                    ; CS Param 4 and 5 (File Name)
  243. kContainerResponse                EQU        3                    ; CS Param 6 and 7 (VAR pointer to short result)
  244. kMountVolumeImg                    EQU        54
  245. OLD_MOUNT_VOLUME_IMG            EQU        2000
  246. MV_HOST_VREFNUM                    EQU        0
  247. MV_HOST_PAR_ID                    EQU        1
  248. MV_HOST_NAME                    EQU        2
  249. MV_REQ_PERM                        EQU        3
  250. ;  Status Codes
  251.  
  252. kGetPartitionStatus                EQU        50                    ; what is the status of this partition?
  253. kOldGetPartitionStatus            EQU        2200                ; left in for compatibility with shipping Houdini
  254. kDeviceToQuery                    EQU        0                    ; CS Param 0 and 1 (partInfoRecPtr)
  255. kDeviceResponse                    EQU        1                    ; CS Param 2 and 3 (VAR pointer to short result)
  256. kGetPartInfo                    EQU        51                    ; Get a partition info record based on the provided vrefnum
  257. kOldGetPartInfo                    EQU        2300                ; left in for compatibility with shipping Houdini
  258. kPartInfoResponse                EQU        0                    ; var parameter (pointer to partInfoRec) CSParam [0-1]
  259. kGetContainerAlias                EQU        52                    ; Get the alias that describes the file this drive was mounted from.
  260. kOldGetContainerAlias            EQU        2400                ; left in for compatibility with shipping Houdini
  261. kGetAliasResponse                EQU        0                    ;    var parameter (pointer to a Handle) CSParam [0-1]
  262. ;  the result codes to come from the driver interface 
  263.  
  264. DRIVER_NOT_INSTALLED            EQU        -1
  265. DRIVER_BUSY                        EQU        -2
  266. CANT_MOUNT_WITHIN_THIS_FS        EQU        -3                    ; can only mount container within residing on HFS volume
  267. VOLUME_ALREADY_MOUNTED            EQU        -4                    ; Already Mounted
  268. ;  requisite structures for PCX control and status calls
  269.  
  270. kMaxProhibted                    EQU        2                    ; the max number of volumes the PC can possibly have mounted
  271. ;  GestaltSelector for Finding Driver information
  272.  
  273. kGetDriverInfo                    EQU        'vdrc'
  274.  
  275. VerifyCmd                        EQU        5
  276. FormatCmd                        EQU        6
  277. EjectCmd                        EQU        7
  278. ;  Partition information passed back and forth between PCX and the driver
  279. partInfoRec                RECORD 0
  280. SCSIID                     ds        DeviceIdent        ; offset: $0 (0)        ;  DeviceIdent for the device
  281. physPartitionLoc         ds.l    1                ; offset: $4 (4)        ;  physical block number of beginning of partition
  282. partitionNumber             ds.l    1                ; offset: $8 (8)        ;  the partition number of this partition
  283. sizeof                     EQU *                    ; size:   $C (12)
  284.                         ENDR
  285. ; typedef struct partInfoRec *            partInfoRecPtr
  286.  
  287. vPartInfoRec            RECORD 0
  288. VPRTVers                 ds.b    1                ; offset: $0 (0)        ;  Virtual partition version number
  289. VPRTType                 ds.b    1                ; offset: $1 (1)        ;  virtual partition type (DOS, HFS, etc)
  290. drvrRefNum                 ds.w    1                ; offset: $2 (2)        ;  Driver Reference number of partition driver
  291. sizeof                     EQU *                    ; size:   $4 (4)
  292.                         ENDR
  293. ; typedef struct vPartInfoRec *            vPartInfoRecPtr
  294.  
  295. ;  Information related to DOS partitions
  296.  
  297. kDOSSigLow                        EQU        $01FE                ; offset into boot block for DOS signature
  298. kDOSSigHi                        EQU        $01FF                ; offset into boot block for DOS signature
  299. kDOSSigValLo                    EQU        $55                    ; DOS signature value in low byte
  300. kDOSSigValHi                    EQU        $AA                    ; DOS signature value in high byte
  301.     ENDIF
  302.     ENDIF ; __DRIVERGESTALT__ 
  303.  
  304.